<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 获取文章数据（标题 作者 作者id 评论）
    // ==》 利用作者id再去发一个获取作者详情的请求 (作者id 作者名字 作者年龄 作者出生地)
    // ==》 利用作者出生地再发一个或者出生地详情的请求
    // $.ajax({
    //   type: "method",
    //   url: "url",
    //   data: "data",
    //   dataType: "dataType",
    //   success: function (response) {
    //     console.log(response);
    //     $.ajax({
    //       type: "method",
    //       url: "url",
    //       data: response.authorId,
    //       dataType: "dataType",
    //       success: function (res) {
    //         $.ajax({
    //           type: "method",
    //           url: "url",
    //           data: res.address,
    //           dataType: "dataType",
    //           success: function (response) {

    //           }
    //         });
    //       }
    //     });
    //   }
    // });

    // function myajax(option) {
    //   return new Promise((resove, reject) => {
    //     $.ajax({
    //       type: option.type,
    //       url: option.url,
    //       data: option.data,
    //       dataType: option.dataType,
    //       success: function (res) {
    //         resolve(res)
    //       }
    //     });
    //   })
    // }
    // myajax({ type: 'get', url: 'http://localhost:3000/books' })
    //   .then(res => {
    //     console.log(res);
    //   })

    // 为了解决上面回调地狱的问题，Promise出现了

    // Promise实例中保存的是状态 有三个状态，分别是：fulfilled(成功的) rejected(失败的) pending（初始状态） 成功或失败只能存在一个状态，不能同时存在
    // Promise构造函数中需要传递一个参数，这个参数是一个函数， 这个函数又有两个参数，分别是resolve和reject。 resolve和reject又是两个函数，resolve函数用来处理成功的数据，reject函数用来处理失败的原因

    let p = new Promise(function (resolve, reject) {
      setTimeout(() => {
        resolve({ title: 'js', author: 'zhangsan', authorId: 3, comment: 'sdfsdf' })
      }, 1000)
    })

    // 这个函数执行的结果是一个promise对象
    function getAuthorDetail(id) {
      let p = new Promise((resolve, reject) => {
        if (id === 1) {
          setTimeout(() => {
            resolve({ authorId: 1, author: 'zhangsan', age: 22, birthPlace: 'CQ' })
          }, 2000)
        } else {
          reject({ message: '没有这个人的详细信息' })
        }
      })
      return p

    }

    //想要获取成功的数据，需要通过then方法的回调函数
    p
      .then(function (res) {
        // 注意，这里return的是一个promise对象，在这个回调函数return出去的promise对象，可以继续在下一个then函数里面调用
        // 这里利用拿到的结果中的authorId，继续发一个请求。
        let p2 = getAuthorDetail(res.authorId)
        return p2
      })
      .then(res => {
        console.log(res);
        // return getAddressDetail(res.birthPlace)
      })
      .catch(function (error) {
        console.log(error);
      })
  </script>
</body>

</html>